/*

 * @(#) SWFUtil.java 1.0 2004-3-17

 * @author xingxiaojie

 *

 * Copyright 2003 by LongTop Corporation.

 * 10 Hubinbei Road, XiaMen, PRC 361012

 * All rights reserved.

 *

 * This software is the confidential and proprietary information of

 * LongTop Corporation ("Confidential Information").  You

 * shall not disclose such Confidential Information and shall use

 * it only in accordance with the terms of the license agreement

 * you entered into with LongTop.

 */

package net.comm.util;




import java.text.*;
import java.util.*;




/**

 * @author 

 * @version 1.0

 * @creatime 2004-3-17

 */

public class DatetimeUtil {



  /********************************************************

  功    能：返回当前日期

  入口参数：String pattern: 返回当前日期的格式, 如YY-MM-DD, YYYYMMDD

  出口参数：

  返    回：String型的当前日期

  编 写 人：

  编写日期：20051219

  修改备注：

  ********************************************************/

  public static String getCurrentDate(String pattern) {

          String result;

          SimpleDateFormat formatter =new SimpleDateFormat(pattern);

          result=formatter.format(new Date());

          return result;

  }

  /********************************************************

  功    能：返回当前日期

  入口参数：

  出口参数：

  返    回：String型的当前日期, 格式yyyymmdd

  编 写 人：

  编写日期：20051219

  修改备注：

  ********************************************************/

  public static String getDate() {

    Calendar calendar = Calendar.getInstance();

    String strDate = "" + calendar.get(Calendar.DATE);

    String strMonth = "" + (calendar.get(Calendar.MONTH) + 1);

    if ( (calendar.get(Calendar.MONTH) + 1) > 12) {

      strMonth = "01";

    }



    String strYear = "" + calendar.get(Calendar.YEAR);



    if (strDate.length() < 2)

      strDate = "0" + strDate;

    if (strMonth.length() < 2)

      strMonth = "0" + strMonth;



    String curDate = strYear + strMonth + strDate;

    return curDate;

  }



  /********************************************************

  功    能：返回当前时间

  入口参数：

  出口参数：

  返    回：String型的当前日期, 格式hhmmss

  编 写 人：

  编写日期：20051219

  修改备注：

  ********************************************************/

  public static String getTime() {

    Calendar calendar = Calendar.getInstance();

    String strHour = "" + calendar.get(Calendar.HOUR_OF_DAY);

    if (strHour.length() == 1)

      strHour = "0" + strHour;

    String strMinute = "" + calendar.get(Calendar.MINUTE);

    if (strMinute.length() == 1)

      strMinute = "0" + strMinute;

    String strSecond = "" + calendar.get(Calendar.SECOND);

    if (strSecond.length() == 1)

      strSecond = "0" + strSecond;

    String curTime = strHour + strMinute + strSecond;

    return curTime;

  }



  /********************************************************

  功    能：返回当前日期时间

  入口参数：

  出口参数：

  返    回：String型的当前的日期时间, 格式yyyymmddhhmmss

  编 写 人：

  编写日期：20051219

  修改备注：

  ********************************************************/

  public static String getDatetime() {

    Calendar calendar = Calendar.getInstance();

    String strDate = "" + calendar.get(Calendar.DATE);

    String strMonth = "" + (calendar.get(Calendar.MONTH) + 1);

    if ( (calendar.get(Calendar.MONTH) + 1) > 12) {

      strMonth = "01";

    }



    String strYear = "" + calendar.get(Calendar.YEAR);

    String strHour = "" + calendar.get(Calendar.HOUR_OF_DAY);

    String strMinute = "" + calendar.get(Calendar.MINUTE);

    String strSecond = "" + calendar.get(Calendar.SECOND);

    if (strDate.length() < 2)

      strDate = "0" + strDate;

    if (strMonth.length() < 2)

      strMonth = "0" + strMonth;

    if (strHour.length() < 2)

      strHour = "0" + strHour;

    if (strMinute.length() < 2)

      strMinute = "0" + strMinute;

    if (strSecond.length() < 2)

      strSecond = "0" + strSecond;

    String curNow = strYear + strMonth + strDate + strHour + strMinute + strSecond;

    return curNow;

  }



  /********************************************************

  功    能：返回当前日期

  入口参数：

  出口参数：

  返    回：String型的当前日期, 格式yyyy-mm-dd

  编 写 人：

  编写日期：20051219

  修改备注：

  ********************************************************/

  public static String getFormatDate() {

    GregorianCalendar gCalendar = new GregorianCalendar();

    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    String strFormatDate;

    try {

      strFormatDate = formatter.format(gCalendar.getTime());

      strFormatDate = strFormatDate.substring(0, 10);

    }

    catch (Exception ex) {

      System.out.println("errMsg:".concat(String.valueOf(String.valueOf(

          ex.

          toString()))));

      String s = null;

      return s;

    }

    return strFormatDate;



  }

  

  /********************************************************

  功    能：返回当前时间

  入口参数：

  出口参数：

  返    回：String型的当前日期, 格式hh:mm:ss

  编 写 人：

  编写日期：20051219

  修改备注：

  ********************************************************/

  public static String getFormatTime() {

    GregorianCalendar gCalendar = new GregorianCalendar();

    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    String strFormatTime;

    try {

      strFormatTime = formatter.format(gCalendar.getTime());

      strFormatTime = strFormatTime.substring(11, 19);

    }

    catch (Exception ex) {

      System.out.println("errMsg:".concat(String.valueOf(String.valueOf(ex.toString()))));

      String s = null;

      return s;

    }

    return strFormatTime;

  }

  /********************************************************

  功    能：返回当前日期时间

  入口参数：

  出口参数：

  返    回：String型的当前的日期时间, 格式yyyy-MM-dd HH:mm:ss

  编 写 人：

  编写日期：20051219

  修改备注：

  ********************************************************/

  public static String getFormatDatetime() throws Exception {

    GregorianCalendar gCalendar = new GregorianCalendar();

    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    String strDateTime;

    try {

      strDateTime = formatter.format(gCalendar.getTime());

    }

    catch (Exception ex) {

      System.out.println("Error Message:".concat(String.valueOf(String.

          valueOf(

          ex.toString()))));

      String s = null;

      return s;

    }

    return strDateTime;

  }



  /********************************************************

  功    能：取出某一年的所有星期几的日期

  入口参数：int year: 年份, YYYY格式

          int week: 星期, 1~7

  出口参数：

  返    回：String型的当前的日期时间, 格式yyyy-MM-dd HH:mm:ss

  编 写 人：

  编写日期：20051219

  修改备注：

  ********************************************************/

  public static String[] getYearWeek(int year, int week) {

    String result = "";

    Calendar cal = new GregorianCalendar(Locale.CHINESE);

    SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd");

    Date day = new Date(year - 1900, 0, 1);



    for (int i = 0; i < 366; i++) {

      cal.setTime(day);

      if (cal.get(Calendar.DAY_OF_WEEK) == week) {

        if (day.getYear() == year - 1900)

          result += "/" + formatter.format(day);



      }

      day.setDate(day.getDate() + 1);

      cal.setTime(day);

    }

    return(result.split("/"));

//    return (StringUtil.mySplit(result, '/'));

  }



  /********************************************************

  功    能：根据一个输入串转换成日期，并判断是星期几

  入口参数：String类型日期YYYYMMDD

  出口参数：

  返    回：int 类型，周1～7

  编 写 人：

  编写日期：20051219

  修改备注：

  ********************************************************/

  public static int getWeekOfDate(String strDate) throws Exception {

    SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd");

    Date date = new Date();

    try {

      date = formatter.parse(strDate);

      if (date.getDay() == 0)

        return 7;

      else

        return date.getDay();

    }

    catch (ParseException e) {

      e.printStackTrace();

    }

    return 1;

  }



  /********************************************************

  功    能：根据一个输入串转换成日期

  入口参数：String类型日期YYYYMMDD

  出口参数：

  返    回：date 类型的日期

  编 写 人：

  编写日期：20051219

  修改备注：

  ********************************************************/

  public static Date StringToDate(String s) {

    Date date = new Date(0L);

    try {

      Calendar calendar = Calendar.getInstance();

      int year = Integer.parseInt(s.substring(0,4));

      int month = Integer.parseInt(s.substring(4,6));

      int day = Integer.parseInt(s.substring(6,s.length()));

      calendar.set(year, month - 1, day);

      date.setTime(calendar.getTime().getTime());

    }

    catch (Exception e) {

      System.out.println(String.valueOf( (new StringBuffer(String.valueOf(e))).append(",").append(s)));

    }

    return date;

  }



  /********************************************************

  功    能：根据指定格式，把date型日期转换为String

  入口参数：Date dt:       要转换的日期

          String fmtStr: 格式字符串， 如YYYYMMDD, YYYY/MM/DD

  出口参数：

  返    回：date 类型日期

  编 写 人：

  编写日期：20051219

  修改备注：

  ********************************************************/

  public static String DateToString(Date dt, String fmtStr) {



    SimpleDateFormat format = new SimpleDateFormat(fmtStr);

    return format.format(dt);

  }



  /********************************************************

  功    能：对日期字符串进行格式化输出，如YYYYMMDD->YYYY/MM/DD

  入口参数：String strDate: 要转换的日期字符串, YYYYMMDD格式

          char DateSeparator: 分隔符，/或-；如YYYY-MM-DD, YYYY/MM/DD

  出口参数：

  返    回：格式化（插入了分割符）后的日期字符串

  编 写 人：

  编写日期：20051219

  修改备注：

  ********************************************************/

  public static String FormatDate(String strDate, char DateSeparator)

  {

     String strOutDate;

     int Len;



     Len = strDate.length();

     if ((Len != 6) && (Len != 8))

        strOutDate = strDate;

     else

     {

      if (Len == 6)

      {

        strDate=strDate.substring(0,2)+DateSeparator+strDate.substring(2,4)+DateSeparator+strDate.substring(4);

        strOutDate = strDate;

      }

      else

      {

        strDate=strDate.substring(0,4)+DateSeparator+strDate.substring(4,6)+DateSeparator+strDate.substring(6);

        strOutDate = strDate;

        strOutDate = strDate;

      }

     }

     return strOutDate;

  }
  /********************************************************
  功    能：对日期字符串进行格式化输出，如YYYYMMDD->MM/DD
  入口参数：String strDate: 要转换的日期字符串, YYYYMMDD格式
          char DateSeparator: 分隔符，/或-；如MM-DD, MM/DD
  出口参数：
  返    回：格式化（插入了分割符）后的日期字符串
  编 写 人：
  编写日期：20051219
  修改备注：
  ********************************************************/
  public static String FormatMMDD(String strDate, char DateSeparator)
  {
     String strOutDate;
     int Len;
     Len = strDate.length();

     if ((Len != 6) && (Len != 8))

        strOutDate = strDate;
     else
     {
      if (Len == 6)
      {
        strDate=strDate.substring(2,4)+DateSeparator+strDate.substring(4);

        strOutDate = strDate;
      }
      else
      {
        strDate=strDate.substring(4,6)+DateSeparator+strDate.substring(6);

        strOutDate = strDate;
      }
     }
     return strOutDate;

  } 
  /********************************************************
  功    能：对日期字符串进行格式化输出，如YYYYMMDDHHMMSS->MM/DD
  入口参数：String strDate: 要转换的日期字符串, YYYYMMDD格式
          char DateSeparator: 分隔符，/或-；如MM-DD, MM/DD
  出口参数：
  返    回：格式化（插入了分割符）后的日期字符串
  编 写 人：
  编写日期：20051219
  修改备注：
  ********************************************************/
  public static String FormatMMDD14(String strDate, char DateSeparator)
  {
     String strOutDate;
     int Len;
     Len = strDate.length();

     if ((Len != 14) )

        strOutDate = strDate;
     else
     {
        strDate=strDate.substring(4,6)+DateSeparator+strDate.substring(6,8);

        strOutDate = strDate;
     }
     return strOutDate;

  }  
  /********************************************************
  功    能：对日期字符串进行格式化输出，如YYYYMMDDHHMMSS->YYYY/MM/DD
  入口参数：String strDate: 要转换的日期字符串, YYYYMMDD格式
          char DateSeparator: 分隔符，/或-；如MM-DD, MM/DD
  出口参数：
  返    回：格式化（插入了分割符）后的日期字符串
  编 写 人：
  编写日期：20051219
  修改备注：
  ********************************************************/
  public static String FormatYYYYMMDD(String strDate, char DateSeparator)
  {
     String strOutDate;
     int Len;
     Len = strDate.length();

     if ((Len != 14) )

        strOutDate = strDate;
     else
     {
        strDate=strDate.substring(0,4)+DateSeparator+strDate.substring(4,6)+DateSeparator+strDate.substring(6,8);

        strOutDate = strDate;
     }
     return strOutDate;

  }   
  /********************************************************
  功    能：对日期时间字符串进行格式化输出，如YYYYMMDDHHMMSS->MM-DD HH:MM
  入口参数：String strDate: 要转换的日期字符串, YYYYMMDDHHMMSS格式
  出口参数：
  返    回：格式化（插入了分割符）后的日期字符串
  编 写 人：
  编写日期：20051219
  修改备注：
  ********************************************************/
  public static String FormatMDHM(String strDate)
  {
     String strOutDate;
     int Len;
     Len = strDate.length();
     if ((Len != 14))
        strOutDate = strDate;
     else
     {
        strDate=strDate.substring(4,6)+"-"+strDate.substring(6,8)+ " "+ strDate.substring(8,10) +
        ":" + strDate.substring(10,12);

        strOutDate = strDate;
     }
     return strOutDate;

  }   
  /********************************************************

  功    能：对日期字符串进行英文化(日/月/年)格式化输出，如YYYYMMDD->DD/MM/YYYY

  入口参数：String strDate: 要转换的日期字符串, YYYYMMDD格式

          char DateSeparator: 分隔符，/或-；如DD-MM-YYYY, DD/MM/YYYY

  出口参数：

  返    回：格式化（插入了分割符）后的日期字符串

  编 写 人：

  编写日期：20071218

  修改备注：香港分行报表日期格式为DD/MM/YYYY,此为英式英语日期习惯表示法,美式英语表示方法为:MM/DD/YYYY

  ********************************************************/

  public static String EngFormatDate8(String strDate, char DateSeparator)

  {

     String strOutDate;

     int Len;



     Len = strDate.length();

     if ((Len != 6) && (Len != 8))

        strOutDate = strDate;

     else

     {

      if (Len == 6)

      {

        strDate=strDate.substring(4,6)+DateSeparator+strDate.substring(2,4)+DateSeparator+strDate.substring(0,2);

        strOutDate = strDate;

      }

      else

      {

        strDate=strDate.substring(6,8)+DateSeparator+strDate.substring(4,6)+DateSeparator+strDate.substring(0,4);

        strOutDate = strDate;

        strOutDate = strDate;

      }

     }

     return strOutDate;

  }

  

  /********************************************************

  功    能：对6位日期字符串进行格式化输出，YYMMDD->YY-MM-DD

  入口参数：String strDate: 要转换的6位日期字符串, YYMMDD格式

  出口参数：

  返    回：格式化后的日期字符串, YY-MM-DD

  编 写 人：

  编写日期：20051219

  修改备注：

  ********************************************************/

  public static String FormatDate6(String strDate)

  {

   if (strDate==null) {return "";}

   strDate=strDate.trim();

   if (strDate.length()<6) {return "";}

   else {return "20"+strDate.substring(0,2)+"-"+strDate.substring(2,4)+"-"+strDate.substring(4);}

  }



  /********************************************************

  功    能：对8位日期字符串进行格式化输出，YYYYMMDD->YYYY-MM-DD

  入口参数：String strDate: 要转换的8位日期字符串, YYYYMMDD格式

  出口参数：

  返    回：格式化后的日期字符串, YYYY-MM-DD

  编 写 人：

  编写日期：20051219

  修改备注：

  ********************************************************/

  public static String FormatDate8(String strDate)

  {

   if (strDate==null) {return "";}

   strDate=strDate.trim();

   if (strDate.length()<8) {return "";}

   else {return strDate.substring(0,4)+"-"+strDate.substring(4,6)+"-"+strDate.substring(6);}

  }


  /********************************************************

  功    能：对14位日期时间字符串进行格式化输出，YYYYMMDDHHMMSS->YYYY-MM-DD HH:MM

  入口参数：String strDate: 要转换的14位日期字符串, YYYYMMDDHHMMSS格式 年月日的分隔字符串 spl=cn 使用汉字分隔，
  spl='-'使用输入的分隔符分隔  时间固定使用：分隔

  出口参数：

  返    回：格式化后的日期字符串, YYYY-MM-DD

  编 写 人：

  编写日期：20051219

  修改备注：

  ********************************************************/

  public static String FormatDate14(String strDatetime, String spl)

  {
   StringBuffer sb = new StringBuffer();
   if (strDatetime==null) {return "";}

   strDatetime=strDatetime.trim();

   if (strDatetime.length()<14) {return "";}

   if(spl.equals("cn")){
	   sb.append(strDatetime.substring(0,4));
	   sb.append("年");
	   sb.append(strDatetime.substring(4,6));
	   sb.append("月");
	   sb.append(strDatetime.substring(6,8));
	   sb.append("日 ");
	   sb.append(strDatetime.substring(8,10));
	   sb.append(":");
	   sb.append(strDatetime.substring(10,12));
   }else{
	   sb.append(strDatetime.substring(0,4));
	   sb.append(spl);
	   sb.append(strDatetime.substring(4,6));
	   sb.append(spl);
	   sb.append(strDatetime.substring(6,8));
	   sb.append(" ");
	   sb.append(strDatetime.substring(8,10));
	   sb.append(":");
	   sb.append(strDatetime.substring(10,12));
   }
   return sb.toString();
  }
 

  /********************************************************

  功    能：去掉日期的分隔符, 即把带分隔符格式日期字符串转为YYYYMMDD

  入口参数：String strDate: 要转换的日期字符串, YYYYMMDD格式

          char DateSeparator: 分隔符，/或-；如YYYY-MM-DD, YYYY/MM/DD

  出口参数：

  返    回：删除了分割符后的日期字符串, YYYYMMDD格式

  编 写 人：

  编写日期：

  修改备注：

  ********************************************************/

  public static String DeFormatDate(String strDate,char DateSeparator) {

    strDate = strDate + DateSeparator;

    String[] strs = StringUtil.doSplit(strDate, DateSeparator);

    if (strs[1].length() == 1)

      strs[1] = "0" + strs[1];

    if (strs[2].length() == 1)

      strs[2] = "0" + strs[2];

    return strs[0] + strs[1] + strs[2];    

  }

  

  /********************************************************

  功    能：去掉日期的分隔符, 即把带分隔符格式日期字符串转为YYMMDD

  入口参数：String strDate: 要转换的6位日期字符串, 如YY-MM-DD格式

  出口参数：

  返    回：删除了分割符后的日期字符串, YYMMDD格式

  编 写 人：

  编写日期：

  修改备注：

  ********************************************************/

  public static String DeFormatDate6(String strDate)

  {

   if (strDate==null) {return "";}

   else if (strDate.length()<10) {return "";}

   else {return strDate.substring(2,4)+strDate.substring(5,7)+strDate.substring(8);}

  }

  

  /********************************************************

  功    能：去掉日期的分隔符, 即把带分隔符格式日期字符串转为YYYYMMDD

  入口参数：String strDate: 要转换的8位日期字符串, 如YYYY-MM-DD格式

  出口参数：

  返    回：删除了分割符后的日期字符串, YYYYMMDD格式

  编 写 人：

  编写日期：

  修改备注：

  ********************************************************/

  public static String DeFormatDate8(String strDate)

  {

   if (strDate==null) {return "";}

   else if (strDate.length()<10) {return "";}

   else {return strDate.substring(0,4)+strDate.substring(5,7)+strDate.substring(8);}

  }

  /********************************************************

  功    能：去掉日期时间的分隔符, 即把带分隔符格式日期字符串转为YYYYMMDDHHMMSS

  入口参数：String strDate: 要转换的8位日期字符串, 如YYYY-MM-DD HH:MM:SS格式

  出口参数：

  返    回：删除了分割符后的日期字符串, YYYYMMDDHHMMSS格式

  编 写 人：

  编写日期：20051219

  修改备注：

  ********************************************************/

  public static String DeFormatDate14(String strDatetime)

  {
   StringBuffer sb = new StringBuffer("");
   if (strDatetime==null) {return "";}

   else if (strDatetime.length()<16) {return "";}

   if(strDatetime.indexOf("-") < 0 ||strDatetime.indexOf(":") < 0){
	   return "";
   }
   String[] tmp = strDatetime.split(" ");
   if(tmp.length > 1){
	   
	   String[] tmpdate = tmp[0].split("-");
	   if(tmpdate.length > 2){
		   sb.append(tmpdate[0]);
		   sb.append(tmpdate[1]);
		   sb.append(tmpdate[2]);
	   }
	   String[] tmptime = tmp[1].split(":");
	   if(tmptime.length > 1){
		   sb.append(tmptime[0]);
		   sb.append(tmptime[1]);
	   }
	   if(tmptime.length == 2){
		   sb.append("00");
	   }
   }
   return sb.toString();

  }

  /********************************************************

  功    能：对时间字符串进行格式化输出，如HHMMSS->HH:MM:SS

  入口参数：String strTime: 要转换的时间字符串, HHMMSS格式

          char TimeSepartor: 分隔符，:或-；如HH:MM:SS

  出口参数：

  返    回：格式化（插入了分割符）后的时间字符串

  编 写 人：

  编写日期：

  修改备注：

  ********************************************************/

  public static String FormatTime(String strTime,char TimeSepartor)

  {

    String strOutTime;

    if (strTime.length() != 6)

      return strTime;

    strTime=strTime.substring(0,2)+TimeSepartor+strTime.substring(2,4)+TimeSepartor+strTime.substring(4);

    strOutTime = strTime;

    return strOutTime;

  }

  /********************************************************

  功    能：去掉时间的分隔符, 如把带分隔符格式时间字符串HH:MM:SS转为HHMMSS

  入口参数：String strTime: 要转换的时间字符串, HH:MM:SS格式

          char TimeSepartor: 分隔符，:或-；如HH:MM:SS

  出口参数：

  返    回：删除了分割符后的时间字符串, HHMMSS格式

  编 写 人：

  编写日期：

  修改备注：

  ********************************************************/

  public static String DeFormatTime(String strTime,char TimeSepartor) {

	  strTime = strTime + TimeSepartor;

    String[] strs = StringUtil.doSplit(strTime, TimeSepartor);

    if (strs[1].length() == 1)

      strs[1] = "0" + strs[1];

    if (strs[2].length() == 1)

      strs[2] = "0" + strs[2];

    return strs[0] + strs[1] + strs[2];

  }



  /********************************************************

  功    能：计算两个日期的时间差

  入口参数：String sDate: 起始日期, YYYYMMDD格式

          String fDate: 结束日期, YYYYMMDD格式

  出口参数：

  返    回：int 两个日期的时间差，返回天数

  编 写 人：

  编写日期：

  修改备注：

  ********************************************************/

  public static int diffDate(String sDate, String fDate) throws Exception {



    if (sDate.trim().equals("") ||

        fDate.trim().equals("")) {

      return 0;

    }

    SimpleDateFormat myFormatter = new SimpleDateFormat("yyyyMMdd");

    java.util.Date sdate = myFormatter.parse(sDate);

    java.util.Date fdate = myFormatter.parse(fDate);

    int diffdate = (int) ( (fdate.getTime() - sdate.getTime()) /

                          (1000 * 60 * 60 * 24));

    return diffdate;

  }



  /********************************************************

  功    能：计算两个日期的时间差

  入口参数：String sDate: 起始日期

          String fDate: 结束日期

          String dateformat1, 日期格式

  出口参数：

  返    回：int 两个日期的时间差，返回天数

  编 写 人：

  编写日期：

  修改备注：

  ********************************************************/

  public static int diffDate(String sDate, String fDate, String dateformat1) throws

      Exception {

    SimpleDateFormat myFormatter = new SimpleDateFormat(dateformat1);

    java.util.Date sdate = myFormatter.parse(sDate);

    java.util.Date fdate = myFormatter.parse(fDate);

    int diffdate = (int) ( (fdate.getTime() - sdate.getTime()) /

                          (1000 * 60 * 60 * 24));

    return diffdate;

  }



  /********************************************************

  功    能：计算两个日期的时间差

  入口参数：String sTime: 起始日期时间, yyyy-MM-dd HH:mm:ss格式

          String fTime: 结束日期时间, yyyy-MM-dd HH:mm:ss格式

  出口参数：

  返    回：int 时间差，返回秒

  编 写 人：

  编写日期：

  修改备注：

  ********************************************************/

  public static int diffTime(String sTime, String fTime) throws Exception {

    SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    java.util.Date stime = myFormatter.parse(sTime);

    java.util.Date ftime = myFormatter.parse(fTime);

    int second = (int) ( (ftime.getTime() - stime.getTime()) / 1000);

    return second;

  }

  /********************************************************

  功    能：计算两个日期的时间差

  入口参数：String sTime: 起始日期时间

          String fTime: 结束日期时间

          String dateformat1, 日期格式



  出口参数：

  返    回：int 时间差，返回秒

  编 写 人：

  编写日期：

  修改备注：

  ********************************************************/

  public static int diffTime(String sTime, String fTime, String Dateformat1) throws

      Exception {

    SimpleDateFormat myFormatter = new SimpleDateFormat(Dateformat1);

    java.util.Date stime = myFormatter.parse(sTime);

    java.util.Date ftime = myFormatter.parse(fTime);

    int second = (int) ( (ftime.getTime() - stime.getTime()) / 1000);

    return second;

  }

  

  //

  /********************************************************

  功    能：判断strDate是否是正确的日期，格式为YYYYMMDD

  入口参数：String strDate:要判断的日期字符串

  出口参数：

  返    回：boolean , true: 传入的是正确日期

                     false: 传入的是错误日期

  编 写 人：

  编写日期：

  修改备注：

  ********************************************************/

    public static boolean isdate_yyyymmdd(String strDate)

    {

    	    if (strDate==null || strDate.length()!=8) return false;

    	    //年份在0000~9999

            if (strDate.charAt(0)>'9' || strDate.charAt(0)<='0') {

                return false;

            }

            if (strDate.charAt(1)>'9' || strDate.charAt(1)<'0') {

                return false;

            }

            if (strDate.charAt(2)>'9' || strDate.charAt(2)<'0') {

                return false;

            }

            if (strDate.charAt(3)>'9' || strDate.charAt(3)<'0') {

                return false;

            }

            int intyear=Integer.parseInt(strDate.substring(0,4));

            //月份在00~12

            if (strDate.charAt(4)>'1' || strDate.charAt(4)<'0') {

                return false;

            }

            if (strDate.charAt(5)>'9' || strDate.charAt(5)<'0') {

                return false;

            }

            int intmonth=Integer.parseInt(strDate.substring(4,6));

            if (intmonth>12 || intmonth<0) return false;

            //日期

            if (strDate.charAt(6)>'3' || strDate.charAt(6)<'0') {

                return false;

            }

            if (strDate.charAt(7)>'9' || strDate.charAt(7)<'0') {

               return false;

            }

            int intday=Integer.parseInt(strDate.substring(6,8));

            if (intmonth==1||intmonth==3||intmonth==5||

                intmonth==7||intmonth==8||intmonth==10||intmonth==12)

            {

              if (intday > 31 || intday < 0) return false;

            }

            else if (intmonth==4||intmonth==6||intmonth==9||intmonth==11)

            {

              if (intday > 30 || intday < 0) return false;

            }

            else if (intmonth==2 && intyear%4 ==0 && intyear%100==0)

            {

              if (intday > 28 || intday < 0) return false;

            }

            else if (intmonth==2 && intyear%4 ==0)

            {

              if (intday > 29 || intday < 0) return false;

            }

            else if (intmonth==2)

            {

             if (intday > 28 || intday < 0)

               return false;

            }

            return true;

    }





    /********************************************************

    功    能：转换6位日期为8位日期, 如051219->

    入口参数：String str1:6位日期字符串, YYMMDD格式

    出口参数：

    返    回：8位日期字符串, YYYYMMDD格式

    编 写 人：

    编写日期：

    修改备注：

    ********************************************************/

  public static String Date6To8(String str1)

  {

   if (str1==null) {return "";}

   str1=str1.trim();

   if (str1.length()!=6) {return "";}

   String yy=str1.substring(0,2);

   String mm=str1.substring(2,4);

   String dd=str1.substring(4,6);

   try{

    if (Integer.parseInt(yy)>=70) yy="19"+yy;

    else yy="20"+yy;

    if ((Integer.parseInt(mm)<1)||(Integer.parseInt(mm)>12))

    {return "";}

    if ((Integer.parseInt(dd)<1)||(Integer.parseInt(dd)>31))

    {return "";}

   }

   catch(Exception e) {return "";}

   return yy+mm+dd;

  }



	/**

	 * 取得与上一次明细提取最后日期同年同月的本次日期

	 * @param strSysDate

	 * @param strLastEndDate

	 * @return

	 */

	public static String getEndDate(String strSysDate, String strLastEndDate){

		String strEndDate = null;

  	

		if ( strLastEndDate.substring(0,6).equals(strSysDate.substring(0,6)) ){

			strEndDate = strSysDate;

		}else{

			if ( strLastEndDate.substring(0,4).equals(strSysDate.substring(0,4)) ){

				strEndDate = getDate(strLastEndDate.substring(0,6));

			}else{

				strEndDate = strLastEndDate.substring(0,4) + "1231";	//跨年，取前一年的12月31日

			}

		}

  	    	

		return strEndDate;

	}

	

	/**

	 * 取某年某月的最后一天日期YYYYMMDD

	 * @param strYYYYMM

	 * @return

	 */

	public static String getDate(String strYYYYMM){

		String strDate = null;

  	

		if ( strYYYYMM.substring(4).equals("01")

			||  strYYYYMM.substring(4).equals("03")

			||  strYYYYMM.substring(4).equals("05")

			||  strYYYYMM.substring(4).equals("07")

			||  strYYYYMM.substring(4).equals("08")

			||  strYYYYMM.substring(4).equals("10")

			||  strYYYYMM.substring(4).equals("12") )

		{

			strDate = strYYYYMM + "31";

		}

		else

		if ( strYYYYMM.substring(4).equals("04")

			||  strYYYYMM.substring(4).equals("06")

			||  strYYYYMM.substring(4).equals("09")

			||  strYYYYMM.substring(4).equals("11") )

		{

			strDate = strYYYYMM + "30";

		}

		else

		{

			if ( isLeapYear(strYYYYMM.substring(0,4) ) )

			{

				strDate = strYYYYMM + "29";

			}

			else

			{

				strDate = strYYYYMM + "28";

			}

		}

		

		return strDate;

	}

	

	/**

	 * 判断是否闰年

	 * @param strYYYY

	 * @return

	 */

	public static boolean isLeapYear(String strYYYY){

		boolean bLeap = false;

		Calendar cal = Calendar.getInstance();

		bLeap = ( (GregorianCalendar)cal ).isLeapYear(Integer.parseInt(strYYYY));

		return bLeap;
	}
	
	//将YYYYMMDD转成日期型
	public static Date strtoDate(String strDate) throws Exception {
		SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd");
		Date date = new Date();
		try {
			date = formatter.parse(strDate);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return date;
	}
	
	//取之后的第i天
	public static Date GetNextiDate(Date date, int i) {
		long ni = i * 1000 * 60 * 60 * 24 + date.getTime();

		Date ndate = new Date(ni);
		return ndate;
	}
	
	//将日期转换成String YYMMDD
	public static String DateToString(java.util.Date dt) {
		SimpleDateFormat format = new SimpleDateFormat("yyMMdd");
		return format.format(dt);
	}
	
	//获取前或者后N天的日期
	// strdate:起始日期YYYYMMDD
	// i:推算天数
	// strPorNflag:N:向前;P:向后
	public static String GetNextDate(String strdate, int i,char chPorNflag) throws Exception {
		Date ndate = strtoDate(strdate);
		if (chPorNflag == 'N')
			ndate = GetNextiDate(ndate, i);
		else if (chPorNflag == 'P')
			ndate = GetNextiDate(ndate, -i);
		String nstrdate = "20"+DateToString(ndate);
		return nstrdate;
	}
	
    /**
     * 判断系统时间是否在指定的时间范围
     * @param starttime
     * @param endtime
     * @throws Exception
     * add by yczheng on 20070928
     */
    public static boolean bjudgeRange(String starttime, String endtime){
        String nowtime = DatetimeUtil.getTime();

        //如起始时间 小于 结束时间
        if (starttime.compareToIgnoreCase(endtime) < 0){
            if (nowtime.compareToIgnoreCase(starttime) > 0 && nowtime.compareToIgnoreCase(endtime) < 0){
                return true;
            }else{
                return false;
            }
        }else{
            if (nowtime.compareToIgnoreCase(endtime) > 0 && nowtime.compareToIgnoreCase(starttime) < 0){
                return false;
            }else{
                return true;
            }
        }
    }
    
    /**
     * 时间字符串转换成Date对象
     * @param dateStr		时间字符串
     * @param formatStr		时间格式
     * @return
     */
    public static Date string2Date(String dateStr,String formatStr)
	{
		SimpleDateFormat sdf = new SimpleDateFormat(formatStr);
		try
		{
			return sdf.parse(dateStr);
		}
		catch (ParseException ex)
		{
			ex.printStackTrace();
			return null;
		}
	}
    
    /**
     * 获取和给定时间间隔指定(年/月/日/小时/分钟/秒)数的时间
     * @param dSrc	给定的时间
     * @param num	间隔时间
     * @param type	年/月/日/小时/分钟/秒
     * @return
     */
    public static Date getNewDate(Date date , int num , int type)
	{
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		switch(type)
		{
			case Calendar.YEAR : 
				cal.set(Calendar.YEAR,cal.get(Calendar.YEAR) + num);
				break;
			
			case Calendar.MONTH :
				cal.set(Calendar.MONTH,cal.get(Calendar.MONTH) + num);
				break;
				
			case Calendar.DATE :
				cal.set(Calendar.DATE , cal.get(Calendar.DATE) + num);
				break;
				
			case Calendar.HOUR :
				cal.set(Calendar.HOUR , cal.get(Calendar.HOUR) + num);
				break;
				
			case Calendar.MINUTE :
				cal.set(Calendar.MINUTE , cal.get(Calendar.MINUTE) + num);
				break;
				
			case Calendar.SECOND :
				cal.set(Calendar.SECOND , cal.get(Calendar.SECOND) + num);
				break;
				
			default :
				cal.set(Calendar.DATE , cal.get(Calendar.DATE) + num);
				break;
		}
		
		Date newDate = cal.getTime();
		return newDate;
	}
    
    
     /**
     * 根据日期格式长短类型，及系统的Locale类型,获取相应日期格式
     * @param date    日期   格式与iso对应
     * @param formatType  >>DateFormat.SHORT、   DateFormat.MEDIUM、DateFormat.LONG、DateFormat.FULL
     * @param locale　　　　>>　Locale.UK 、Locale.CHINA　　  
     * @param iso    格式 如:"MM/dd/yy" 、"yyyy/MM/dd"、"MM-dd-yyyy"、"yyyy-MM-dd"
     * @return
     */
    public static String getDatebylocale(String date,int formatType,Locale locale,String iso){
    	String datestrs="";
        try {
    	   Date myDate = new Date();
           java.text.SimpleDateFormat format = new java.text.SimpleDateFormat(iso);
           myDate = format.parse(date);
           DateFormat dateformat = DateFormat.getDateInstance(formatType,locale);             
           datestrs=dateformat.format(myDate);
    	} catch (ParseException e) {
			e.printStackTrace();
		}
	   return datestrs;
    }
    
    /**
     * 对指定日期时间进行加减
     * @param date    日期   格式与iso对应
     * @param timeType >>Calendar.DAY_OF_YEAR、 Calendar.MINUTE、Calendar.SECOND;
     * @param n      增加或减少数值
     * @param iso 格式 如:"MM/dd/yy" 、"yyyy/MM/dd"、"MM-dd-yyyy"、"yyyyMMddhhmmss"
     * @return 格式是当前iso格式
     */
    public static String getDateByadd(String date,int timeType,int n,String iso){
    	String tReturn="";
		Date myDate = new Date();
        java.text.SimpleDateFormat format = new java.text.SimpleDateFormat(iso);
        try {
			myDate = format.parse(date);
		    Calendar now = Calendar.getInstance();		
		    now.setTime(myDate); 		 
		    SimpleDateFormat formatter = new SimpleDateFormat(iso);
		    now.add(timeType,n);
		    tReturn=formatter.format(now.getTime());
        } catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    	return tReturn;
    	
    }
    /**
     * 计算两个日期之间相差的天数
     * @param iso
     * @return
     */    
    public static long getQuot(String time1, String time2) {
        long quot = 0;
        SimpleDateFormat ft = new SimpleDateFormat("yyyyMMddHHmmss");
        try {
          Date date1 = ft.parse(time1);
          Date date2 = ft.parse(time2);
          quot = date1.getTime() - date2.getTime();
          quot = quot / 1000 / 60 / 60 / 24;
        } catch (ParseException e) {
          e.printStackTrace();
        }
        return quot;
      }   
    /**
     * 计算两个日期之间相差的日 时分秒
     * @param iso
     * @param iso
     * @param type  返回类型 日 时分秒
     * @return
     */    
    public static long getQuotDHMS(String time1, String time2, int type) {
        long quot = 0;
        SimpleDateFormat ft = new SimpleDateFormat("yyyyMMddHHmmss");
        try {
          Date date1 = ft.parse(time1);
          Date date2 = ft.parse(time2);
          quot = date1.getTime() - date2.getTime();
	  	  switch(type)
		  {
				case Calendar.DATE :
			        quot = quot / 1000 / 60 / 60 / 24;
					break;
				case Calendar.HOUR :
			        quot = quot / 1000 / 60 / 60 ;
					break;
				case Calendar.MINUTE :
			        quot = quot / 1000 / 60 ;
					break;
				case Calendar.SECOND :
			        quot = quot / 1000 ;
					break;
				default :
					break;
		   }         
        } catch (ParseException e) {
          e.printStackTrace();
        }
        return quot;
      }     
    /**
     * 计算两个日期之间相差的时间
     * 输出格式：XX天XX小时XX分XX秒
     * @param iso
     * @return
     */    
    public static String getQuotDHMS(String time1, String time2) {
        StringBuffer sb = new StringBuffer();
        SimpleDateFormat ft = new SimpleDateFormat("yyyyMMddHHmmss");
        try {
          long quot = 0;
          Date date1 = ft.parse(time1);
          Date date2 = ft.parse(time2);
          quot = date1.getTime() - date2.getTime();

          long day=quot/(24*60*60*1000);
          long hour=(quot/(60*60*1000)-day*24);
          long min=((quot/(60*1000))-day*24*60-hour*60);
          long s=(quot/1000-day*24*60*60-hour*60*60-min*60);

          if(day >0){
        	  sb.append(day);
        	  sb.append("天");
          }
          if(hour >0){
        	  sb.append(hour);
        	  sb.append("小时");
          }
          if(min >0){
        	  sb.append(min);
        	  sb.append("分钟");
          }
          if(s >0){
        	  sb.append(s);
        	  sb.append("秒");
          }
          
        } catch (ParseException e) {
          e.printStackTrace();
        }
        return sb.toString();
      }   
    
    /**
     * 根据格式获取当前时间
     * @param iso
     * @return
     */
    public static String getDateTime(String iso){
    	String tReturn="";
    	Date now = new Date();
        java.text.SimpleDateFormat format = new java.text.SimpleDateFormat(iso);
        tReturn=format.format(now);        
    	return tReturn;   	
    }
}

